package test;

import java.util.Scanner;

public class KeDaXunFei1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int[][] nums = new int[n][m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                nums[i][j] = scanner.nextInt();
            }
        }
        System.out.println(getRes(nums,n,m));
    }

    private static int getRes(int[][] nums, int n, int m) {
        if (n <= 1 && m <= 1){
            return 0;
        }
        int max = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                int newMax = getMaxMult(i,j,nums) * nums[i][j];
                if (max < newMax){
                    max = Math.max(max,newMax);
                }
            }
        }
        return max;
    }

    private static int getMaxMult(int indexRow, int indexColumn, int[][] nums) {
        int maxNum = 0;
        for (int i = 0; i < nums.length; i++) {
            for (int j = 0; j < nums[0].length; j++) {
                if (i != indexRow && j != indexColumn){
                    if (maxNum < nums[i][j]){
                        maxNum = nums[i][j];
                    }
                }
            }
        }
        return maxNum;
    }
}
//        int[][][] dp = new int[n][m][2];
//        dp[0][0][0] = nums[0][0];//max num
//        dp[0][0][1] = 0;//max mult
//        for (int i = 0; i < m; i++) {
//            dp[0][i][0] = Math.max(dp[0][i - 1][0],nums[0][i]);
//        }
//        for (int i = 0; i < n; i++) {
//            dp[i][0][0] = Math.max(dp[i - 1][0][0],nums[i][0]);
//        }
//        for (int i = 1; i < n; i++) {
//            for (int j = 1; j < m; j++) {
//                if (dp[i - 1][j - 1][0] * nums[i][j] > dp[i - 1][j - 1][1]){
//
//                }
//            }
//        }
